/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufsc.aps.convocados;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author gustavo.ramos
 */
public class Tecnico implements Serializable {

    private String nome;
    private List<Jogador> jogadores;
    private List<Jogador> jogadoresTrocaEsquema;
    private List<EsquemaTatico> esquemas;
    private int quantidadeSubstituicao;
    private boolean daVez;
    private Posicao defesa = null;
    private Posicao meio = null;
    private Posicao ataque = null;
    private EsquemaTatico esquemaAtual, esquemaReserva;

    public Tecnico() {
    }

    public Tecnico(String nome, List<Jogador> jogadores, List<EsquemaTatico> esquemas) {
        this.nome = nome;
        this.jogadores = jogadores;
        this.esquemas = esquemas;
    }

    public void setEsquemaTatico(int def, int me, int ata) {
        setDefesa(new Posicao(TipoPosicao.DEFESA, def));
        setMeio(new Posicao(TipoPosicao.MEIO, me));
        setAtaque(new Posicao(TipoPosicao.ATAQUE, ata));
    }
    
    public void addJogador(Jogador novoJogador){
        getJogadores().add(novoJogador);
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the jogadores
     */
    public List<Jogador> getJogadores() {
        return jogadores;
    }

    /**
     * @param jogadores the jogadores to set
     */
    public void setJogadores(List<Jogador> jogadores) {
        this.jogadores = jogadores;
    }

    /**
     * @return the esquemas
     */
    public List<EsquemaTatico> getEsquemas() {
        return esquemas;
    }

    /**
     * @param esquemas the esquemas to set
     */
    public void setEsquemas(List<EsquemaTatico> esquemas) {
        this.esquemas = esquemas;
    }

    public int getQuantidadeSubstituicao() {
        return quantidadeSubstituicao;
    }

    public void setQuantidadeSubstituicao(int quantidadeSubstituicao) {
        this.quantidadeSubstituicao = quantidadeSubstituicao;
    }

    /**
     * @return the daVez
     */
    public boolean isDaVez() {
        return daVez;
    }

    /**
     * @param daVez the daVez to set
     */
    public void setDaVez(boolean daVez) {
        this.daVez = daVez;
    }

    /**
     * @return the defesa
     */
    public Posicao getDefesa() {
        return defesa;
    }

    /**
     * @param defesa the defesa to set
     */
    public void setDefesa(Posicao defesa) {
        this.defesa = defesa;
    }

    /**
     * @return the meio
     */
    public Posicao getMeio() {
        return meio;
    }

    /**
     * @param meio the meio to set
     */
    public void setMeio(Posicao meio) {
        this.meio = meio;
    }

    /**
     * @return the ataque
     */
    public Posicao getAtaque() {
        return ataque;
    }

    /**
     * @param ataque the ataque to set
     */
    public void setAtaque(Posicao ataque) {
        this.ataque = ataque;
    }

    public void setEsquemaAtual(EsquemaTatico esq) {
        esquemaAtual = esq;
    }

    public EsquemaTatico getEsquemaAtual() {
        return esquemaAtual;
    }

    public void setEsquemaReserva(EsquemaTatico esquemaReserva) {
        this.esquemaReserva = esquemaReserva;
    }

    public EsquemaTatico getEsquemaReserva() {
        return esquemaReserva;
    }

    boolean isCampoVazio() {
        return defesa.getJogadores().isEmpty() && meio.getJogadores().isEmpty() && ataque.getJogadores().isEmpty();
    }
    
    public int getQuantidadeEmCampo(){
        return defesa.getJogadores().size()+meio.getJogadores().size()+ataque.getJogadores().size();
    }

    public void trocarEsquemaTatico() {
        EsquemaTatico reserva = this.getEsquemaReserva();
        this.setEsquemaReserva(this.getEsquemaAtual());
        this.setEsquemaAtual(reserva);
        this.jogadoresTrocaEsquema = new ArrayList<Jogador>();
        this.getJogadoresTrocaEsquema().addAll(this.defesa.getJogadores());
        this.getJogadoresTrocaEsquema().addAll(this.meio.getJogadores());
        this.getJogadoresTrocaEsquema().addAll(this.ataque.getJogadores());
        this.setDefesa(new Posicao(TipoPosicao.DEFESA, getEsquemaAtual().getDefesa()));
        this.setMeio(new Posicao(TipoPosicao.MEIO, getEsquemaAtual().getMeio()));
        this.setAtaque(new Posicao(TipoPosicao.ATAQUE, getEsquemaAtual().getAtaque()));
        //--
        
    }

    /**
     * @return the jogadoresTrocaEsquema
     */
    public List<Jogador> getJogadoresTrocaEsquema() {
        return jogadoresTrocaEsquema;
    }
}
